home *** CD-ROM | disk | FTP | other *** search
- // BitArrayBase.h
-
- #ifndef BitArrayBase_h
- #define BitArrayBase_h
-
- #ifndef BitReference_h
- #include "BitReference.h"
- #endif
-
- class BitArrayBase
- {
- public:
- typedef uint32 Unit;
- enum { unitLength = 32 };
-
- private:
- Unit *const bits;
- const uint32 length;
- const uint32 units;
- const Unit *const end;
- const Unit lastUnitMask;
-
- public:
- BitArrayBase( Unit *theBits, uint32 theLength );
- BitArrayBase( Unit *theBits, uint32 theLength, bool initialValue );
-
- uint32 Length() const { return length; }
-
- bool operator[]( uint32 i ) const;
- BitReference operator[]( uint32 i );
-
- void SetAll();
- void ClearAll();
- void ChangeAll();
- void SetAll( bool b );
-
- bool operator==( const BitArrayBase& ) const;
- bool operator!=( const BitArrayBase& r ) const { return !(*this == r); }
-
- void operator=( const BitArrayBase& );
- void operator&=( const BitArrayBase& );
- void operator|=( const BitArrayBase& );
- void operator^=( const BitArrayBase& );
-
- uint32 FirstZero( uint32 start = 0 ) const; // start <= result <= length
- uint32 FirstOne( uint32 start = 0 ) const;
-
- uint32 LastZero( uint32 start ) const; // 0 <= result < start
- uint32 LastOne( uint32 start ) const; // or result == length (not found)
-
- uint32 LastZero() const { return LastZero( length ); }
- uint32 LastOne() const { return LastOne( length ); }
- };
-
- #endif
-